home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip: 2001 Haziran
/
CHIP Haziran2001.iso
/
prog
/
haziran
/
19
/
setup.exe
/
data.z
/
windrvr.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2001-04-11
|
36KB
|
1,025 lines
{
W i n D r i v e r v 5 . 0 0
==============================
Header file for Windows 95/98/ME/NT/NTE/NT2000.
This file may not be distributed, it is only for evaluation & development purposes.
Web site: http://www.jungo.com/windrv
Email: support@jungo.com
(C) Jungo 2001
}
unit WinDrvr;
interface
uses
Windows, Dialogs, SysUtils;
const
WD_VER = 500;
WD_VER_STR = 'WinDriver V5.00 Jungo (c) 2001';
CMD_NONE = 0; { No command }
CMD_END = 1; { End command }
RP_BYTE = 10; { Read port byte }
RP_WORD = 11; { Read port word }
RP_DWORD = 12; { Read port dword }
WP_BYTE = 13; { Write port byte }
WP_WORD = 14; { Write port word }
WP_DWORD = 15; { Write port dword }
RP_SBYTE = 20; { Read port string byte }
RP_SWORD = 21; { Read port string word }
RP_SDWORD = 22; { Read port string dword }
WP_SBYTE = 23; { Write port string byte }
WP_SWORD = 24; { Write port string word }
WP_SDWORD = 25; { Write port string dword }
RM_BYTE = 30; { Read memory byte }
RM_WORD = 31; { Read memory word }
RM_DWORD = 32; { Read memory dword }
WM_BYTE = 33; { Write memory byte }
WM_WORD = 34; { Write memory word }
WM_DWORD = 35; { Write memory dword }
RM_SBYTE = 40; { Read memory string byte }
RM_SWORD = 41; { Read memory string word }
RM_SDWORD = 42; { Read memory string dword }
WM_SBYTE = 43; { Write memory string byte }
WM_SWORD = 44; { Write memory string word }
WM_SDWORD = 45; { Write memory string dword }
WD_DMA_PAGES = 256;
DMA_KERNEL_BUFFER_ALLOC = 1; { the system allocates a contiguous buffer }
{ the user doesnt need to supply linear_address }
DMA_KBUF_BELOW_16M = 2; { if DMA_KERNEL_BUFFER_ALLOC if used, }
{ this will make sure it is under 16M }
DMA_LARGE_BUFFER = 4; { if DMA_LARGE_BUFFER if used, }
{ the maximum number of pages are dwPages, and not }
{ WD_DMA_PAGES. if you lock a user buffer (not a kernel }
{ allocated buffer) that is larger than 1MB, then use this }
{ option, and allocate memory for pages. }
type
PVOID = Pointer;
HANDLE = THandle;
WD_DMA_PAGE = record
pPhysicalAddr: PVOID; { physical address of page }
dwBytes: DWORD { size of page }
end;
WD_DMA = record
hDMA: DWORD; { handle of DMA buffer }
pUserAddr: PVOID; { beginning of buffer }
dwBytes: DWORD; { size of buffer }
dwOptions: DWORD; { allocation options: }
dwPages: DWORD; { number of pages in buffer }
Page: array [0 .. WD_DMA_PAGES - 1] of WD_DMA_PAGE
end;
SWD_TRANSFER = record { replaces WD_TRANSFER structure to avoid conflict }
{ with WD_Transfer() function }
cmdTrans: DWORD; { Transfer command SWD_TRANSFER_CMD }
dwPort: DWORD; { IO port for transfer or user memory address }
dwBytes: DWORD; { For string transfer }
fAutoInc: DWORD; { Transfer from one port/address or }
{ use incremental range of addresses }
dwOptions: DWORD; { Must be 0 }
case Integer of
0: (AByte: BYTE); { Byte transfer }
1: (AWord: WORD); { Word transfer }
2: (ADword: DWORD); { Dword transfer }
3: (pBuffer: PVOID) { String transfer }
end;
PWD_TRANSFER = ^ SWD_TRANSFER;
const
INTERRUPT_LEVEL_SENSITIVE = 1;
INTERRUPT_CMD_COPY = 2;
type
WD_KERNEL_PLUGIN_CALL = record
hKernelPlugIn: DWORD;
dwMessage: DWORD;
pData: PVOID;
dwResult: DWORD
end;
WD_INTERRUPT = record
hInterrupt: DWORD; { handle of interrupt }
dwOptions: DWORD; { interrupt options: INTERRUPT_CMD_COPY }
Cmd: PWD_TRANSFER; { commands to do on interrupt }
dwCmds: DWORD; { number of commands for WD_IntEnable() }
kpCall: WD_KERNEL_PLUGIN_CALL; { kernel plugin call }
fEnableOk: DWORD; { did WD_IntEnable() succeed }
{ For WD_IntWait() and WD_IntCount() }
dwCounter: DWORD; { number of interrupts received }
dwLost: DWORD; { number of interrupts not yet dealt with }
fStopped: DWORD { was interrupt disabled during wait }
end;
SWD_VERSION = record { replaces WD_VERSION structure to avoid conflict }
{ with WD_Version() function }
dwVer: DWORD;
cVer: array [0 .. 100-1] of CHAR { needs testing if pascal string is compatible }
end;
const
LICENSE_DEMO=$1; LICENSE_WD=$4; LICENSE_KD=$400000;
LICENSE_IO =$8; LICENSE_MEM =$10; LICENSE_INT =$20;
LICENSE_PCI =$40; LICENSE_DMA =$80; LICENSE_NT =$100;
LICENSE_95 =$200; LICENSE_ISAPNP=$400; LICENSE_PCMCIA=$800;
LICENSE_PCI_DUMP=$1000; LICENSE_MSG_GEN=$2000; LICENSE_MSG_EDU=$4000;
LICENSE_MSG_INT=$8000; LICENSE_KER_PLUG=$10000;
LICENSE2_CPCI=$1;
type
SWD_LICENSE = record { replaces WD_LICENSE structure to avoid conflict }
{ with WD_License() function }
cLicense: array [0 .. 100-1] of CHAR; { buffer with license string to }
{ put. If empty string then get }
{ current license setting into }
{ dwLicense }
dwLicense: DWORD; { Returns license settings: }
dwLicense2: DWORD { LICENSE_DEMO, LICENSE_WD etc... }
{ If put license was unsuccessful }
{ (i.e. invalid license) then dwLicense }
{ will return 0. }
end;
const
ITEM_NONE=0; ITEM_INTERRUPT=1; ITEM_MEMORY=2; ITEM_IO=3; ITEM_BUS=5;
type
WD_ITEM_MEMORY = record
dwPhysicalAddr: DWORD; { Physical address on card }
dwMBytes: DWORD; { Address range }
dwTransAddr: DWORD; { Returns the address to pass }
{ on to transfer commands }
dwUserDirectAddr: DWORD; { Returns the address for}
{ direct user read/write }
dwCpuPhysicalAddr: DWORD { returns the CPU physical address of card }
end;
WD_ITEM_IO = record
dwAddr: DWORD; { Begining of IO address }
dwBytes: DWORD { IO range }
end;
WD_ITEM_INTERRUPT = record
dwInterrupt: DWORD; { Number of interrupt to }
{ install }
dwOptions: DWORD; { Interrupt options: }
{ INTERRUPT_LEVEL_SENSITIVE }
hInterrupt: DWORD { Returns the handle of the }
{ interrupt installed }
end;
WD_BUS = record
dwBusType: DWORD; { Bus type: ISA, EISA, PCI, PCMCIA }
dwBusNum: DWORD; { Bus number }
dwSlotFunc: DWORD { Slot number on Bus }
end;
WD_ITEM_VALUE = record
dw1: DWORD;
dw2: DWORD;
dw3: DWORD;
dw4: DWORD;
dw5: DWORD
end;
WD_ITEMS = record
Item: DWORD { ITEM_TYPE };
fNotSharable: DWORD;
case Integer of
0 { ITEM_MEMORY }:
(
Memory: WD_ITEM_MEMORY
);
1 { ITEM_IO }:
(
IO: WD_ITEM_IO
);
2 { ITEM_INTERRUPT }:
(
Interrupt: WD_ITEM_INTERRUPT
);
3 { ITEM_BUS }:
(
Bus: WD_BUS
);
4 { ITEM_VALUE }:
(
Value: WD_ITEM_VALUE
)
end;
PWD_ITEMS = ^WD_ITEMS;
const
WD_CARD_ITEMS = 20;
type
WD_CARD = record
dwItems: DWORD;
Item: array [0 .. WD_CARD_ITEMS - 1] of WD_ITEMS
end;
PWD_CARD = ^WD_CARD;
WD_CARD_REGISTER = record
Card: WD_CARD; { card to register }
fCheckLockOnly: DWORD ; { only check if card is lockable, return hCard=1 if OK }
hCard: DWORD; { handle of card }
dwOptions: DWORD; { should be zero }
cName: array[0 .. 32-1] of CHAR; { name of card }
cDescription: array [0 .. 100-1] of CHAR { description }
end;
const
WD_PCI_CARDS = 30;
type
WD_PCI_SLOT = record
dwBus: DWORD;
dwSlot: DWORD;
dwFunction: DWORD
end;
PWD_PCI_SLOT = ^WD_PCI_SLOT;
WD_PCI_ID = record
dwVendorId: DWORD;
dwDeviceId: DWORD
end;
WD_PCI_SCAN_CARDS = record
searchId: WD_PCI_ID; { if dwVendorId = 0, scan all vendor Ids }
{ if dwDeviceId = 0, scan all device Ids }
dwCards: DWORD; { Number of cards found }
cardId: array [0 .. WD_PCI_CARDS - 1] of WD_PCI_ID;
{ VendorID & DeviceID of cards found }
cardSlot: array [0 .. WD_PCI_CARDS - 1] of WD_PCI_SLOT
{ PCI slot info of cards found }
end;
WD_PCI_CARD_INFO = record
pciSlot: WD_PCI_SLOT; { PCI slot }
Card: WD_CARD { Get card parameters for PCI slot }
end;
const
PCI_ACCESS_OK=0; PCI_ACCESS_ERROR=1; PCI_BAD_BUS=2; PCI_BAD_SLOT=3;
type
WD_PCI_CONFIG_DUMP = record
pciSlot: WD_PCI_SLOT; { PCI bus, slot and function number }
pBuffer: PVOID; { buffer for read/write }
dwOffset: DWORD; { offset in pci configuration space }
{ to read/write from }
dwBytes: DWORD; { bytes to read/write from/to buffer }
{ returns the # of bytes read/written }
fIsRead: DWORD; { if 1 then read pci config, 0 write }
{ pci config }
dwResult: DWORD { PCI_ACCESS_RESULT }
end;
const
WD_ISAPNP_CARDS = 16 ;
const
WD_ISAPNP_COMPATIBLE_IDS = 10 ;
const
WD_ISAPNP_COMP_ID_LENGTH = 7 ; { ISA compressed ID is 7 chars long }
const
WD_ISAPNP_ANSI_LENGTH = 32 ; { ISA ANSI ID is limited to 32 chars long }
type
WD_ISAPNP_COMP_ID = array[0 .. WD_ISAPNP_COMP_ID_LENGTH] of CHAR;
WD_ISAPNP_ANSI = array[0 .. WD_ISAPNP_ANSI_LENGTH+3] of CHAR; { add 3 bytes for DWORD alignment }
WD_ISAPNP_CARD_ID = record
cVendor: WD_ISAPNP_COMP_ID; { Vendor ID }
dwSerial: DWORD { Serial number of card }
end;
WD_ISAPNP_CARD = record
cardId: WD_ISAPNP_CARD_ID; { VendorID & serial number of cards found }
dcLogicalDevices: DWORD; { Logical devices on the card }
bPnPVersionMajor: BYTE; { ISA PnP version Major }
bPnPVersionMinor: BYTE; { ISA PnP version Minor }
bVendorVersionMajor: BYTE; { Vendor version Major }
bVendorVersionMinor: BYTE; { Vendor version Minor }
cIdent: WD_ISAPNP_ANSI ;{ Device identifier }
end;
WD_ISAPNP_SCAN_CARDS = record
searchId: WD_ISAPNP_CARD_ID; { if searchId.cVendor[0]==0 - scan all vendor IDs
if searchId.dwSerial==0 - scan all serial numbers }
dwCards: DWORD; { number of cards found }
Card: array[0 .. WD_ISAPNP_CARDS-1] of WD_ISAPNP_CARD { cards found }
end;
WD_ISAPNP_CARD_INFO = record
cardId: WD_ISAPNP_CARD_ID; { VendorID and serial number of card }
dwLogicalDevice: DWORD; { logical device in card }
cLogicalDeviceId: WD_ISAPNP_COMP_ID; { logical device ID }
dwCompatibleDevices: DWORD; { number of compatible device IDs }
CompatibleDevice: array[0 .. WD_ISAPNP_COMPATIBLE_IDS-1] of WD_ISAPNP_COMP_ID; { Compatible device IDs }
cIdent: WD_ISAPNP_ANSI; { Device identifier }
Card: WD_CARD { get card parameters for the ISA PnP card }
end;
type
WD_ISAPNP_CONFIG_DUMP = record
cardId: WD_ISAPNP_CARD_ID; { VendorID and serial number of card }
dwOffset: DWORD; { offset in ISA PnP configuration space to read/write from }
fIsRead: DWORD; { if 1 then read ISA PnP config, 0 write ISA PnP config }
bData: BYTE; { result data of byte read/write }
dwResult: DWORD { ISAPNP_ACCESS_RESULT }
end;
const
ISAPNP_ACCESS_OK = 0; ISAPNP_ACCESS_ERROR = 1; ISAPNP_BAD_ID = 2;
{ PCMCIA Card Services }
const
WD_PCMCIA_CARDS = 8;
const
WD_PCMCIA_VERSION_LEN = 4;
const
WD_PCMCIA_MANUFACTURER_LEN = 48;
const
WD_PCMCIA_PRODUCTNAME_LEN = 48;
const
WD_PCMCIA_MAX_SOCKET = 2;
const
WD_PCMCIA_MAX_FUNCTION = 2;
type
WD_PCMCIA_SLOT = record
uSocket: BYTE; {Specifies the socket number (first socket is 0)}
uFunction: BYTE; {Specifies the function number (first function is 0)}
uPadding0: BYTE; {2 bytes padding so structure will be 4 bytes aligned}
uPadding1: BYTE
end;
WD_PCMCIA_ID = record
dwManufacturerId: DWORD; {card manufacturer}
dwCardId: DWORD {card type and model}
end;
WD_PCMCIA_SCAN_CARDS = record
searchId: WD_PCMCIA_ID; {device ID to search for}
dwCards: DWORD; {number of cards found}
cardId: array [0..WD_PCMCIA_CARDS-1] of WD_PCMCIA_ID; {device IDs of cards found}
cardSlot: array [0..WD_PCMCIA_CARDS-1] of WD_PCMCIA_SLOT {pcmcia slot info of cards found}
end;
WD_PCMCIA_CARD_INFO = record
pcmciaSlot: WD_PCMCIA_SLOT; {pcmcia slot}
Card: WD_CARD; {get card parameters for pcmcia slot}
cVersion: array [0..WD_PCMCIA_VERSION_LEN-1] of CHAR;
cManufacturer: array [0..WD_PCMCIA_MANUFACTURER_LEN-1] of CHAR;
cProductName: array [0..WD_PCMCIA_PRODUCTNAME_LEN-1] of CHAR;
dwManufacturerId: DWORD; {card manufacturer}
dwCardId: DWORD; {card type and model}
dwFuncId: DWORD {card function code}
end;
WD_PCMCIA_CONFIG_DUMP = record
pcmciaSlot: WD_PCMCIA_SLOT;
pBuffer: PVOID; {buffer for read/write}
dwOffset: DWORD; {offset in pcmcia configuration space to}
{read/write from}
dwBytes: DWORD; {bytes to read/write from/to buffer}
{returns the number of bytes read/wrote}
fIsRead: DWORD; {if 1 then read pci config, 0 write pci config}
dwResult: DWORD {PCMCIA_ACCESS_RESULT}
end;
const
SLEEP_NON_BUSY = 1;
type
SWD_SLEEP = record { replaces WD_SLEEP structure to avoid conflict }
{ with WD_Sleep() function }
dwMicroSeconds: DWORD; { Sleep time in Micro Seconds (1/1,000,000 Second) }
dwOptions: DWORD { can be:
SLEEP_NON_BUSY this is accurate only for times above 10000 uSec }
end;
const
D_OFF = 0; D_ERROR=1; D_WARN=2; D_INFO=3; D_TRACE=4;
const
S_ALL =$ffffffff;
S_IO =$8; S_MEM =$10; S_INT=$20; S_PCI=$40; S_DMA=$80; S_MISC=$100; S_LICENSE=$200;
S_ISAPNP=$400; S_PCMCIA=$800; S_KER_PLUG=$10000; S_CARD_REG=$2000;
const
DEBUG_STATUS = 1;
DEBUG_SET_FILTER = 2;
DEBUG_SET_BUFFER = 3;
DEBUG_CLEAR_BUFFER = 4;
DEBUG_DUMP_SEC_ON = 5;
DEBUG_DUMP_SEC_OFF = 6;
const
METHOD_BUFFERED = 0;
METHOD_IN_DIRECT = 1;
METHOD_OUT_DIRECT = 2;
METHOD_NEITHER = 3;
const
FILE_ANY_ACCESS = $0;
FILE_READ_ACCESS = $1; { file & pipe }
FILE_WRITE_ACCESS = $2; { file & pipe }
type
SWD_DEBUG = record { replaces WD_DEBUG structure to avoid conflict }
{ with WD_Debug() function }
dwCmd: DWORD; { DEBUG_COMMAND: DEBUG_STATUS, DEBUG_SET_FILTER, DEBUG_SET_BUFFER, DEBUG_CLEAR_BUFFER
used for DEBUG_SET_FILTER }
dwLevel: DWORD; { DEBUG_LEVEL: D_ERROR, D_WARN..., or D_OFF to turn debugging off }
dwSection: DWORD; { DEBUG_SECTION: for all sections in driver: S_ALL
for partial sections: S_IO, S_MEM... }
dwLevelMessageBox: DWORD; { DEBUG_LEVEL to print in a message box
used for DEBUG_SET_BUFFER }
dwBufferSize: DWORD { size of buffer in kernel }
end;
WD_DEBUG_DUMP = record
pcBuffer: PCHAR; { buffer to receive debug messages }
dwSize: DWORD { size of buffer in bytes }
end;
WD_KERNEL_PLUGIN = record
hKernelPlugIn: DWORD;
pcDriverName: PCHAR;
pcDriverPath: PCHAR; { if NULL the driver will be searched in the windows system directory }
pOpenData: PVOID
end;
{ taken from usbdi.h }
type USBD_PIPE_TYPE = DWORD;
const
UsbdPipeTypeControl = 0;
UsbdPipeTypeIsochronous = 1;
UsbdPipeTypeBulk = 2;
UsbdPipeTypeInterrupt = 3;
var { Pseudo constants }
IOCTL_WD_USB_RESET_PIPE : INTEGER;
IOCTL_WD_USB_RESET_DEVICE : INTEGER;
IOCTL_WD_USB_SCAN_DEVICES : INTEGER;
IOCTL_WD_USB_SCAN_DEVICES_V432 : INTEGER;
IOCTL_WD_USB_TRANSFER : INTEGER;
IOCTL_WD_USB_DEVICE_REGISTER : INTEGER;
IOCTL_WD_USB_DEVICE_UNREGISTER : INTEGER;
IOCTL_WD_USB_GET_CONFIGURATION : INTEGER;
const
WD_USB_MAX_PIPE_NUMBER = 32;
WD_USB_MAX_ENDPOINTS = 32;
WD_USB_MAX_INTERFACES = 30;
WD_USB_MAX_DEVICE_NUMBER = 127;
type
WD_USB_ID = record
dwVendorId : DWORD;
dwProductId : DWORD;
end;
PWD_USB_ID = ^WD_USB_ID;
type USB_DIR = DWORD;
const
UsbDirIn = 1;
UsbDirOut = 2;
UsbDirInOot = 3;
type
WD_USB_PIPE_INFO = record
dwNumber : DWORD; {Pipe 0 is the default pipe}
MaximumPacketSize : DWORD;
PipeType : DWORD; { USBD_PIPE_TYPE }
direction : DWORD; {USB_DIR
Isochronous, Bulk, Interrupt are either USB_DIR_IN
or USB_DIR_OUT Control are USB_DIR_IN_OUT}
dwInterval : DWORD {interval in ms relevant to Interrupt pipes}
end;
PWD_USB_PIPE_INFO = ^WD_USB_PIPE_INFO;
type
WD_USB_CONFIG_DESC = record
dwNumInterfaces : DWORD;
dwValue : DWORD;
dwAttributes : DWORD;
MaxPower : DWORD;
end;
PWD_USB_CONFIG_DESC = ^WD_USB_CONFIG_DESC;
type
WD_USB_INTERFACE_DESC = record
dwNumber : DWORD;
dwAlternateSetting : DWORD;
dwNumEndpoints : DWORD;
dwClass : DWORD;
dwSubClass : DWORD;
dwProtocol : DWORD;
dwIndex : DWORD;
end;
PWD_USB_INTERFACE_DESC = ^WD_USB_INTERFACE_DESC;
type
WD_USB_ENDPOINT_DESC = record
dwEndpointAddress : DWORD;
dwAttributes : DWORD;
dwMaxPacketSize : DWORD;
dwInterval : DWORD;
end;
PWD_USB_ENDPOINT_DESC = ^WD_USB_ENDPOINT_DESC;
type
WD_USB_INTERFACE = record
InterfaceDesc : WD_USB_INTERFACE_DESC;
Endpoints : array[0..WD_USB_MAX_ENDPOINTS-1] of WD_USB_ENDPOINT_DESC;
end;
PWD_USB_INTERFACE = ^WD_USB_INTERFACE;
type
WD_USB_CONFIGURATION = record
uniqueId : DWORD;
dwConfigurationIndex : DWORD;
configuration : WD_USB_CONFIG_DESC;
dwInterfaceAlternatives : DWORD;
UsbInterface : array[0..WD_USB_MAX_INTERFACES-1] of WD_USB_INTERFACE;
end;
PWD_USB_CONFIGURATION = ^PWD_USB_CONFIGURATION;
type
WD_USB_HUB_GENERAL_INFO = record
fBusPowered : DWORD;
dwPorts : DWORD; {number of ports on this hub}
dwCharacteristics : DWORD; {Hub Charateristics}
dwPowerOnToPowerGood : DWORD; {port power on till power good in 2ms}
dwHubControlCurrent : DWORD; {max current in mA}
end;
PWD_USB_HUB_GENERAL_INFO = ^WD_USB_HUB_GENERAL_INFO;
type
WD_USB_DEVICE_GENERAL_INFO = record
deviceId : WD_USB_ID;
dwHubNum : DWORD;
dwPortNum : DWORD;
fHub : DWORD;
fFullSpeed : DWORD;
dwConfigurationsNum : DWORD;
deviceAddress : DWORD;
hubInfo : WD_USB_HUB_GENERAL_INFO;
end;
PWD_USB_DEVICE_GENERAL_INFO = ^WD_USB_DEVICE_GENERAL_INFO;
type
WD_USB_DEVICE_INFO = record
dwPipes : DWORD;
Pipe : array[0..WD_USB_MAX_PIPE_NUMBER-1] of WD_USB_PIPE_INFO;
end;
PWD_USB_DEVICE_INFO = ^WD_USB_DEVICE_INFO;
{ IOCTL Structures }
type
WD_USB_SCAN_DEVICES = record
searchId : WD_USB_ID; {if dwVendorId==0 - scan all vendor IDs
if dwProductId==0 - scan all product IDs}
dwDevices : DWORD;
uniqueId : array[0..WD_USB_MAX_DEVICE_NUMBER-1] of DWORD; { a unique id to identify the device}
deviceGeneralInfo : array[0..WD_USB_MAX_DEVICE_NUMBER] of WD_USB_DEVICE_GENERAL_INFO;
end;
PWD_USB_SCAN_DEVICES = ^WD_USB_SCAN_DEVICES;
{ USB TRANSFER options }
const
USB_TRANSFER_HALT = 1;
type
WD_USB_TRANSFER = record
hDevice : DWORD; {handle of USB device to read from or write to}
dwPipe : DWORD; {pipe number on device}
fRead : BOOLEAN;
dwOptions : DWORD; {USB_TRANSFER options:
USB_TRANSFER_HALT halts the pervious transfer on the pipe}
pBuffer : PVOID; {pointer to buffer to read/write}
dwBytes : DWORD;
dwTimeout : DWORD; {timeout for the transfer in milli-seconds. 0==>no timeout.}
dwBytesTransfered : DWORD; {returns the number of bytes actually read/written}
SetupPacket : array[0..7] of BYTE; {setup packet for control pipe transfer}
fOK : DWORD;
end;
PWD_USB_TRANSFER = ^WD_USB_TRANSFER;
type
WD_USB_DEVICE_REGISTER = record
uniqueId : DWORD; {the device unique ID}
dwConfigurationIndex : DWORD; {the index of the configuration to register}
dwInterfaceNum : DWORD; {interface to register}
dwInterfaceAlternate : DWORD;
hDevice : DWORD; {handle of device}
Device : WD_USB_DEVICE_INFO; {description of the device}
dwOptions : DWORD; {should be zero}
cName : array[0..31] of CHAR ; {name of card}
cDescription: array[0..99] of CHAR; {description}
end;
PWD_USB_DEVICE_REGISTER = ^WD_USB_DEVICE_REGISTER;
type
WD_USB_RESET_PIPE = record
hDevice : DWORD;
dwPipe : DWORD;
end;
PWD_USB_RESET_PIPE = ^WD_USB_RESET_PIPE;
function WD_Open : HANDLE;
procedure WD_Close(hWD: HANDLE);
procedure WD_Debug(hWD: HANDLE;var Debug: SWD_DEBUG);
procedure WD_DebugDump(hWD: HANDLE; var DebugDump: WD_DEBUG_DUMP);
procedure WD_Transfer(hWD: HANDLE; var Transfer: SWD_TRANSFER);
procedure WD_MultiTransfer(hWD: HANDLE; var TransferArray: array of SWD_TRANSFER);
procedure WD_DMALock(hWD: HANDLE; var Dma: WD_DMA);
procedure WD_DMAUnlock(hWD: HANDLE; var Dma: WD_DMA);
procedure WD_IntEnable(hWD: HANDLE; var TheInterrupt: WD_INTERRUPT);
procedure WD_IntDisable(hWD: HANDLE; var TheInterrupt: WD_INTERRUPT);
procedure WD_IntCount(hWD: HANDLE; var TheInterrupt: WD_INTERRUPT);
procedure WD_IntWait(hWD: HANDLE; var TheInterrupt: WD_INTERRUPT);
procedure WD_IsapnpScanCards(hWD: HANDLE; var IsapnpScanCards: WD_ISAPNP_SCAN_CARDS);
procedure WD_IsapnpGetCardInfo(hWD: HANDLE; var IsapnpGetCardInfo: WD_ISAPNP_CARD_INFO);
procedure WD_IsapnpConfigDump(hWD: HANDLE; var IsapnpConfigDump: WD_ISAPNP_CONFIG_DUMP);
procedure WD_PcmciaScanCards(hWD: HANDLE; var PcmciaScanCards: WD_PCMCIA_SCAN_CARDS);
procedure WD_PcmciaGetCardInfo(hWD: HANDLE; var PcmciaGetCardInfo: WD_PCMCIA_CARD_INFO);
procedure WD_PcmciaConfigDump(hWD: HANDLE; var PcmciaConfigDump: WD_PCMCIA_CONFIG_DUMP);
procedure WD_Sleep(hWD: HANDLE; var Sleep: SWD_SLEEP);
procedure WD_CardRegister(hWD: HANDLE; var Card: WD_CARD_REGISTER);
procedure WD_CardUnregister(hWD: HANDLE; var Card: WD_CARD_REGISTER);
procedure WD_PciScanCards(hWD: HANDLE; var PciScan: WD_PCI_SCAN_CARDS);
procedure WD_PciGetCardInfo(hWD: HANDLE; var PciCard: WD_PCI_CARD_INFO);
procedure WD_Version(hWD: HANDLE; var VerInfo: SWD_VERSION);
procedure WD_License(hWD: HANDLE; var License: SWD_LICENSE);
procedure WD_KernelPlugInOpen(hWD: HANDLE; var KernelPlugInOpen: WD_KERNEL_PLUGIN);
procedure WD_KernelPlugInClose(hWD: HANDLE; var KernelPlugInClose: WD_KERNEL_PLUGIN);
procedure WD_KernelPlugInCall(hWD: HANDLE; var KernelPlugInCall: WD_KERNEL_PLUGIN_CALL);
procedure WD_PciConfigDump(hWD: HANDLE; var PciConfigDump: WD_PCI_CONFIG_DUMP);
procedure WD_UsbScanDevice(h : HANDLE; pDeviceId : PWD_USB_ID);
procedure WD_UsbGetConfiguration(h : HANDLE; pDeviceId : PWD_USB_ID);
procedure WD_UsbDeviceRegister(h : HANDLE; pRegister : PWD_USB_DEVICE_REGISTER);
procedure WD_UsbTransfer(h : HANDLE; pTrans : PWD_USB_TRANSFER);
procedure WD_UsbDeviceUnregister(h : HANDLE; pTrans : PWD_USB_DEVICE_REGISTER);
procedure WD_UsbResetPipe(h : HANDLE; pResetPipe : PWD_USB_RESET_PIPE);
procedure WD_UsbResetDevice(h : HANDLE; hDevice : DWORD);
var
WinDriverGlobalDW: DWORD;
{ Pseudo constants }
IOCTL_WD_DMA_LOCK: integer;
IOCTL_WD_DMA_UNLOCK: integer;
IOCTL_WD_TRANSFER: integer;
IOCTL_WD_MULTI_TRANSFER: integer;
IOCTL_WD_PCI_SCAN_CARDS: integer;
IOCTL_WD_PCI_GET_CARD_INFO: integer;
IOCTL_WD_VERSION: integer;
IOCTL_WD_LICENSE: integer;
IOCTL_WD_PCI_CONFIG_DUMP: integer;
IOCTL_WD_KERNEL_PLUGIN_OPEN: integer;
IOCTL_WD_KERNEL_PLUGIN_CLOSE: integer;
IOCTL_WD_KERNEL_PLUGIN_CALL: integer;
IOCTL_WD_INT_ENABLE: integer;
IOCTL_WD_INT_DISABLE: integer;
IOCTL_WD_INT_COUNT: integer;
IOCTL_WD_INT_WAIT: integer;
IOCTL_WD_ISAPNP_SCAN_CARDS: integer;
IOCTL_WD_ISAPNP_GET_CARD_INFO: integer;
IOCTL_WD_ISAPNP_CONFIG_DUMP: integer;
IOCTL_WD_SLEEP: integer;
IOCTL_WD_DEBUG: integer;
IOCTL_WD_DEBUG_DUMP: integer;
IOCTL_WD_CARD_UNREGISTER: integer;
IOCTL_WD_CARD_REGISTER: integer;
IOCTL_WD_PCMCIA_SCAN_CARDS: integer;
IOCTL_WD_PCMCIA_GET_CARD_INFO: integer;
IOCTL_WD_PCMCIA_CONFIG_DUMP: integer;
function Get_Ctl_Code(Nr: Integer): Integer;
implementation
const
WD_TYPE = 38200;
{This is an implementation of a WinIOCTL macro (CTL_CODE) }
function Get_Ctl_Code(Nr: Integer): Integer;
begin
Result:= (WD_TYPE shl 16) or (FILE_ANY_ACCESS shl 14) or (Nr shl 2) or
METHOD_NEITHER
end;
function WD_Open: HANDLE;
begin
WD_Open := CreateFile(PChar('\\.\WINDRVR'), GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
end;
procedure WD_Close(hWD: HANDLE);
begin
CloseHandle(hWD);
end ;
procedure WD_Debug(hWD: HANDLE ;var Debug: SWD_DEBUG);
begin
DeviceIOControl(hWD, IOCTL_WD_DEBUG, @Debug,
SizeOf(SWD_DEBUG), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_DebugDump(hWD: HANDLE ;var DebugDump: WD_DEBUG_DUMP);
begin
DeviceIOControl(hWD, IOCTL_WD_DEBUG_DUMP, @DebugDump,
SizeOf(WD_DEBUG_DUMP), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_Transfer(hWD: HANDLE ;var Transfer: SWD_TRANSFER);
begin
DeviceIOControl(hWD, IOCTL_WD_TRANSFER, @Transfer,
SizeOf(SWD_TRANSFER), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_MultiTransfer(hWD: HANDLE ; var TransferArray: array of SWD_TRANSFER);
begin
DeviceIOControl(hWD, IOCTL_WD_MULTI_TRANSFER, @TransferArray,
SizeOf(SWD_TRANSFER) * (High(TransferArray) + 1), nil,
0, WinDriverGlobalDW, nil)
end;
procedure WD_DMALock(hWD: HANDLE ;var Dma: WD_DMA);
begin
DeviceIOControl(hWD, IOCTL_WD_DMA_LOCK, @Dma, SizeOf(WD_DMA), nil, 0,
WinDriverGlobalDW, nil)
end;
procedure WD_DMAUnlock(hWD: HANDLE ;var Dma: WD_DMA);
begin
DeviceIOControl(hWD, IOCTL_WD_DMA_UNLOCK, @Dma, SizeOf(WD_DMA), nil,
0, WinDriverGlobalDW, nil)
end;
procedure WD_IntEnable(hWD: HANDLE ;var TheInterrupt: WD_INTERRUPT);
begin
DeviceIOControl(hWD, IOCTL_WD_INT_ENABLE, @TheInterrupt,
SizeOf(WD_INTERRUPT), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_IntDisable(hWD: HANDLE ;var TheInterrupt: WD_INTERRUPT);
begin
DeviceIOControl(hWD, IOCTL_WD_INT_DISABLE, @TheInterrupt,
SizeOf(WD_INTERRUPT), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_IntCount(hWD: HANDLE ;var TheInterrupt: WD_INTERRUPT);
begin
DeviceIOControl(hWD, IOCTL_WD_INT_COUNT, @TheInterrupt,
SizeOf(WD_INTERRUPT), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_IntWait(hWD: HANDLE ;var TheInterrupt: WD_INTERRUPT);
var
h: HANDLE;
begin
h:=WD_Open();
DeviceIOControl(h, IOCTL_WD_INT_WAIT, @TheInterrupt,
SizeOf(WD_INTERRUPT), nil, 0, WinDriverGlobalDW, nil);
WD_Close(h);
end;
procedure WD_IsapnpScanCards(hWD: HANDLE ;var IsapnpScanCards: WD_ISAPNP_SCAN_CARDS);
begin
DeviceIOControl(hWD, IOCTL_WD_ISAPNP_SCAN_CARDS, @IsapnpScanCards,
SizeOf(WD_ISAPNP_SCAN_CARDS), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_IsapnpGetCardInfo(hWD: HANDLE ;var IsapnpGetCardInfo: WD_ISAPNP_CARD_INFO);
begin
DeviceIOControl(hWD, IOCTL_WD_ISAPNP_GET_CARD_INFO, @IsapnpGetCardInfo,
SizeOf(WD_ISAPNP_CARD_INFO), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_IsapnpConfigDump(hWD: HANDLE ;var IsapnpConfigDump: WD_ISAPNP_CONFIG_DUMP);
begin
DeviceIOControl(hWD, IOCTL_WD_ISAPNP_CONFIG_DUMP, @IsapnpConfigDump,
SizeOf(WD_ISAPNP_CONFIG_DUMP), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_PcmciaScanCards(hWD: HANDLE ;var PcmciaScanCards: WD_PCMCIA_SCAN_CARDS);
begin
DeviceIOControl(hWD, IOCTL_WD_PCMCIA_SCAN_CARDS, @PcmciaScanCards,
SizeOf(WD_PCMCIA_SCAN_CARDS), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_PcmciaGetCardInfo(hWD: HANDLE ;var PcmciaGetCardInfo: WD_PCMCIA_CARD_INFO);
begin
DeviceIOControl(hWD, IOCTL_WD_PCMCIA_GET_CARD_INFO, @PcmciaGetCardInfo,
SizeOf(WD_PCMCIA_CARD_INFO), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_PcmciaConfigDump(hWD: HANDLE ;var PcmciaConfigDump: WD_PCMCIA_CONFIG_DUMP);
begin
DeviceIOControl(hWD, IOCTL_WD_PCMCIA_CONFIG_DUMP, @PcmciaConfigDump,
SizeOf(WD_PCMCIA_CONFIG_DUMP), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_Sleep(hWD: HANDLE ;var Sleep: SWD_SLEEP);
begin
DeviceIOControl(hWD, IOCTL_WD_SLEEP, @Sleep,
SizeOf(SWD_SLEEP), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_CardRegister(hWD: HANDLE ;var Card: WD_CARD_REGISTER);
begin
DeviceIOControl(hWD, IOCTL_WD_CARD_REGISTER, @Card,
SizeOf(WD_CARD_REGISTER), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_CardUnregister(hWD: HANDLE ;var Card: WD_CARD_REGISTER);
begin
DeviceIOControl(hWD, IOCTL_WD_CARD_UNREGISTER, @Card,
SizeOf(WD_CARD_REGISTER), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_PciScanCards(hWD: HANDLE ;var PciScan: WD_PCI_SCAN_CARDS);
begin
DeviceIOControl(hWD, IOCTL_WD_PCI_SCAN_CARDS, @PciScan,
SizeOf(WD_PCI_SCAN_CARDS), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_PciGetCardInfo(hWD: HANDLE ;var PciCard: WD_PCI_CARD_INFO);
begin
DeviceIOControl(hWD, IOCTL_WD_PCI_GET_CARD_INFO, @PciCard,
SizeOf(WD_PCI_CARD_INFO), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_Version(hWD: HANDLE ;var VerInfo: SWD_VERSION);
begin
DeviceIOControl(hWD, IOCTL_WD_VERSION, @VerInfo, SizeOf(SWD_VERSION),
nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_License(hWD: HANDLE ;var License: SWD_LICENSE);
begin
DeviceIOControl(hWD, IOCTL_WD_LICENSE, @License, SizeOf(SWD_LICENSE),
nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_KernelPlugInOpen(hWD: HANDLE ;var KernelPlugInOpen: WD_KERNEL_PLUGIN);
begin
DeviceIOControl(hWD, IOCTL_WD_KERNEL_PLUGIN_OPEN, @KernelPlugInOpen, SizeOf(WD_KERNEL_PLUGIN),
nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_KernelPlugInClose(hWD: HANDLE ;var KernelPlugInClose: WD_KERNEL_PLUGIN);
begin
DeviceIOControl(hWD, IOCTL_WD_KERNEL_PLUGIN_CLOSE, @KernelPlugInClose, SizeOf(WD_KERNEL_PLUGIN),
nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_KernelPlugInCall(hWD: HANDLE ;var KernelPlugInCall: WD_KERNEL_PLUGIN_CALL);
begin
DeviceIOControl(hWD, IOCTL_WD_KERNEL_PLUGIN_CALL, @KernelPlugInCall, SizeOf(WD_KERNEL_PLUGIN_CALL),
nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_PciConfigDump(hWD: HANDLE ;var PciConfigDump: WD_PCI_CONFIG_DUMP);
begin
DeviceIOControl(hWD, IOCTL_WD_PCI_CONFIG_DUMP, @PciConfigDump,
SizeOf(WD_PCI_CONFIG_DUMP), nil, 0, WinDriverGlobalDW, nil)
end;
procedure WD_FUNCTION(wFuncNum : DWORD; h : HANDLE; pParam : POINTER; dwSize : DWORD);
begin
DeviceIoControl(h, wFuncNum, pParam, dwSize, nil, 0, WinDriverGlobalDW, nil);
end;
procedure WD_UsbScanDevice(h : HANDLE; pDeviceId : PWD_USB_ID);
begin
WD_FUNCTION(IOCTL_WD_USB_SCAN_DEVICES, h, POINTER(pDeviceId), DWORD(SizeOf(WD_USB_SCAN_DEVICES)));
end;
procedure WD_UsbGetConfiguration(h : HANDLE; pDeviceId : PWD_USB_ID);
begin
WD_FUNCTION(IOCTL_WD_USB_GET_CONFIGURATION, h, POINTER(pDeviceId), DWORD(SizeOf(WD_USB_CONFIGURATION)));
end;
procedure WD_UsbDeviceRegister(h : HANDLE; pRegister : PWD_USB_DEVICE_REGISTER);
begin
WD_FUNCTION(IOCTL_WD_USB_DEVICE_REGISTER, h, pRegister, DWORD(sizeof(WD_USB_DEVICE_REGISTER)));
end;
procedure WD_UsbTransfer(h : HANDLE; pTrans : PWD_USB_TRANSFER);
var
lh: HANDLE;
begin
lh:=WD_Open();
WD_FUNCTION(IOCTL_WD_USB_TRANSFER, lh, POINTER(pTrans), DWORD(SizeOf(WD_USB_TRANSFER)));
WD_Close(lh);
end;
procedure WD_UsbDeviceUnregister(h : HANDLE; pTrans : PWD_USB_DEVICE_REGISTER);
begin
WD_FUNCTION(IOCTL_WD_USB_DEVICE_UNREGISTER, h, POINTER(pTrans), DWORD(SizeOf(WD_USB_DEVICE_REGISTER)));
end;
procedure WD_UsbResetPipe(h : HANDLE; pResetPipe : PWD_USB_RESET_PIPE);
begin
WD_FUNCTION(IOCTL_WD_USB_RESET_PIPE, h, POINTER(pResetPipe), DWORD(SizeOf(WD_USB_RESET_PIPE)));
end;
procedure WD_UsbResetDevice(h : HANDLE; hDevice : DWORD);
begin
WD_FUNCTION(IOCTL_WD_USB_RESET_DEVICE, h, @hDevice, DWORD(SizeOf(DWORD)));
end;
initialization
IOCTL_WD_DMA_LOCK := Get_Ctl_Code($901) ;
IOCTL_WD_DMA_UNLOCK := Get_Ctl_Code($902) ;
IOCTL_WD_TRANSFER := Get_Ctl_Code($903) ;
IOCTL_WD_MULTI_TRANSFER := Get_Ctl_Code($904) ;
IOCTL_WD_PCI_SCAN_CARDS := Get_Ctl_Code($90e) ;
IOCTL_WD_PCI_GET_CARD_INFO := Get_Ctl_Code($90f) ;
IOCTL_WD_VERSION := Get_Ctl_Code($910) ;
IOCTL_WD_PCI_CONFIG_DUMP := Get_Ctl_Code($91a) ;
IOCTL_WD_KERNEL_PLUGIN_OPEN := Get_Ctl_Code($91b) ;
IOCTL_WD_KERNEL_PLUGIN_CLOSE := Get_Ctl_Code($91c) ;
IOCTL_WD_KERNEL_PLUGIN_CALL := Get_Ctl_Code($91d) ;
IOCTL_WD_INT_ENABLE := Get_Ctl_Code($91e) ;
IOCTL_WD_INT_DISABLE := Get_Ctl_Code($91f) ;
IOCTL_WD_INT_COUNT := Get_Ctl_Code($920) ;
IOCTL_WD_ISAPNP_SCAN_CARDS := Get_Ctl_Code($924) ;
IOCTL_WD_ISAPNP_CONFIG_DUMP := Get_Ctl_Code($926) ;
IOCTL_WD_SLEEP := Get_Ctl_Code($927) ;
IOCTL_WD_DEBUG := Get_Ctl_Code($928) ;
IOCTL_WD_DEBUG_DUMP := Get_Ctl_Code($929) ;
IOCTL_WD_CARD_UNREGISTER := Get_Ctl_Code($92b) ;
IOCTL_WD_ISAPNP_GET_CARD_INFO := Get_Ctl_Code($92d) ;
IOCTL_WD_PCMCIA_SCAN_CARDS := Get_Ctl_Code($92f) ;
IOCTL_WD_PCMCIA_GET_CARD_INFO := Get_Ctl_Code($930) ;
IOCTL_WD_PCMCIA_CONFIG_DUMP := Get_Ctl_Code($931) ;
IOCTL_WD_CARD_REGISTER := Get_Ctl_Code($956) ;
IOCTL_WD_INT_WAIT := Get_Ctl_Code($94b) ;
IOCTL_WD_LICENSE := Get_Ctl_Code($952) ;
IOCTL_WD_USB_RESET_PIPE := Get_Ctl_Code($93c) ;
IOCTL_WD_USB_RESET_DEVICE := Get_Ctl_Code($93f) ;
IOCTL_WD_USB_SCAN_DEVICES_V432 := Get_Ctl_Code($940) ;
IOCTL_WD_USB_SCAN_DEVICES := Get_Ctl_Code($95a) ;
IOCTL_WD_USB_TRANSFER := Get_Ctl_Code($942) ;
IOCTL_WD_USB_DEVICE_REGISTER := Get_Ctl_Code($949) ;
IOCTL_WD_USB_DEVICE_UNREGISTER := Get_Ctl_Code($959) ;
IOCTL_WD_USB_GET_CONFIGURATION := Get_Ctl_Code($946) ;
end.